// call所有的输入需要分辨一下第一个还是后面的，因为apply
// 直接是一个fnuc+[参数]

function type(obj) {
  var regexp = /\s(\w+)\]/
  var result = regexp.exec(Object.prototype.toString.call(obj))[1]
  return result
}

console.log(type([123])) //Array
console.log(type('123')) //String
console.log(type(123)) //Number
console.log(type(null)) //Null
console.log(type(undefined)) //Undefined

var arr = [11, 1, 0, 2, 3, 5]
// 取最大
var max1 = Math.max.call(null, ...arr)
var max2 = Math.max.apply(null, arr)
// 取最小
var min1 = Math.min.call(null, ...arr)
var min2 = Math.min.apply(null, arr)
// max() 方法可返回两个指定的数中带有较大的值的那个数。
// 不能使用数组 console.log(Math.max(-1, -3, -2)); 应该拆开
console.log(Math.max(arr)) // NaN
console.log(max1) //11
console.log(max2) //11
console.log(min1) //0
console.log(min2) //0

var fn = function () {
  // var arr = Array.prototype.slice.call(arguments)
  var arr = [].slice.call(arguments)
  console.log(arr) //[1, 2, 3, 4]
}
fn(1, 2, 3, 4)

name = '时间跳跃'
var obj3 = {
  name: '听风是风',
}
function fn3(global) {
  console.log(this)
  console.log(this.name)
}
// (typeof window !== 'undefined' ? window : global)
fn3() //时间跳跃
fn3.call(obj3) //听风是风
// [].slice.call(arguments)
